//package com.ycy.lucene.sort;
//
//import com.ycy.lucene.index.IndexReadDemo;
//import org.apache.lucene.analysis.core.SimpleAnalyzer;
//import org.apache.lucene.index.DocValues;
//import org.apache.lucene.index.LeafReaderContext;
//import org.apache.lucene.index.NumericDocValues;
//import org.apache.lucene.queryparser.classic.ParseException;
//import org.apache.lucene.queryparser.classic.QueryParser;
//import org.apache.lucene.search.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.io.IOException;
//import java.util.Arrays;
//
///**
// * @Author: ycy
// * @CreateDate: 2019/8/1 16:34
// */
//public class DemoFieldComparatorSource2 extends FieldComparatorSource {
//
//  Logger logger = LoggerFactory.getLogger(this.getClass());
//
//  @Override
//  public FieldComparator<?> newComparator(String fieldname, int numHits, int sortPos, boolean reversed) {
//    logger.info("我又初始化了");
//    return new DemoFieldComparator(numHits, fieldname);
////    return new FieldComparator.IntComparator(numHits,fieldname,0);
//  }
//
//  private class DemoFieldComparator extends FieldComparator<Integer> implements LeafFieldComparator {
//
//    private final int[] values;
//
//    private int bottom;                           // Value of bottom of queue
//
//    private int topValue;
//
//    public String fieldName;
//
//    public DemoFieldComparator(int numHits, String fieldName) {
//      this.values = new int[numHits];
//      this.fieldName =   fieldName;
//    }
//
//    @Override
//    public int compare(int slot1, int slot2) {
//
//      final float v1 = values[slot1];
//      final float v2 = values[slot2];
//      if (v1 > v2) {
//        return 1;
//      } else if (v1 < v2) {
//        return -1;
//      } else {
//        return 0;
//      }
//
////      return Integer.compare(values[slot2], values[slot1]);
//    }
//
//    @Override
//    public void setTopValue(Integer value) {
//      logger.info("{}", value);
//      this.topValue = value;
//    }
//
//    @Override
//    public Integer value(int slot) {
//      return values[slot];
//    }
//
//    private NumericDocValues currentReaderValues;
//
//    @Override
//    public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException {
//      logger.info("分段");
//      currentReaderValues = DocValues.getNumeric(context.reader(), this.fieldName);
//      return this;
//    }
//
//    @Override
//    public void setBottom(int slot) {
//      logger.info("{} , {} ", slot, values[slot]);
//      logger.info("{} ", Arrays.toString(values));
//      this.bottom = values[slot];
//    }
//
//    @Override
//    public int compareBottom(int doc) throws IOException {
////      logger.info("{} , {}", this.bottom, currentReaderValues.get(doc));
////      if (this.bottom > currentReaderValues.get(doc)) {
////        return 1;
////      }
////      return -1;
//
//
//      final float v2 = currentReaderValues.get(doc);
//      if (bottom > v2) {
//        return 1;
//      } else if (bottom < v2) {
//        return -1;
//      } else {
//        return 0;
//      }
//
//      //      return 0;
//    }
//
//    @Override
//    public int compareTop(int doc) throws IOException {
//      logger.info("{}", currentReaderValues.get(doc));
//      if (this.topValue < currentReaderValues.get(doc)) {
//        return -1;
//      }
//      return -1;
////      return 0;
//    }
//
//    @Override
//    public void copy(int slot, int doc) throws IOException {
//      values[slot] = (int) currentReaderValues.get(doc);
//    }
//
//    @Override
//    public void setScorer(Scorer scorer) throws IOException {
//
//    }
//  }
//
//  public static void main(String[] args) {
//
////    Query query = NumericDocValuesField.newRangeQuery("opendate", 0L, 1530720000000L);
//    QueryParser queryParser = new QueryParser("name", new SimpleAnalyzer());
//    Query query = null;
//    try {
////      query = queryParser.parse("真 OR 人 OR 长");
//
//       query = queryParser.parse("长");
//
//
//      //自定义排序
//      SortField sortField = new SortField("sales", new DemoFieldComparatorSource2());
//      IndexReadDemo.search(query, 10, new Sort(sortField));
//    } catch (ParseException e) {
//      e.printStackTrace();
//    }
//
//    /*
//      docid :  19, scoreDoc :  3.1509194 ,id :  17163949 ,name :  aMaze真人密室逃脱 ,opendate :  1493913600000 ,sales : 58
//      docid :  34, scoreDoc :  3.1509194 ,id :  17950766 ,name :  JOJO真人密室逃脱 ,opendate :  1454601600000 ,sales : 15
//      docid :  64, scoreDoc :  3.1509194 ,id :  13913129 ,name :  Captain.C真人密室逃脱 ,opendate :  1375632000000 ,sales : 68
//      docid :  20, scoreDoc :  2.749255 ,id :  21930982 ,name :  MANGOSIX(长宁龙之梦店) ,opendate :  1491321600000 ,sales : 17
//      docid :  46, scoreDoc :  2.749255 ,id :  32640417 ,name :  西塞密室(长宁店) ,opendate :  1423065600000 ,sales : 23
//      docid :  7, scoreDoc :  2.7302647 ,id :  24065790 ,name :  A9真人密室逃脱(黄浦店) ,opendate :  1525449600000 ,sales : 69
//      docid :  61, scoreDoc :  2.7302647 ,id :  18636516 ,name :  ASA亚撒真人密室逃脱 ,opendate :  1383580800000 ,sales : 25
//      docid :  58, scoreDoc :  2.7104602 ,id :  23740568 ,name :  aMaze真人密室逃脱(人民广场大世界店) ,opendate :  1391529600000 ,sales : 37
//      docid :  14, scoreDoc :  2.3822234 ,id :  6850935 ,name :  nook诺克密室逃脱(长宁店) ,opendate :  1507132800000 ,sales : 67
//      docid :  17, scoreDoc :  2.3822234 ,id :  5411446 ,name :  COSTA COFFEE(上海长宁新世界) ,opendate :  1499184000000 ,sales : 5
//      共检索出 21 条记录
//*/
//
//  }
//
//
//}
